/**
 * 
 */
package com.cap.bts.crmdp.webservice;

import org.apache.log4j.Logger;

import com.cap.bts.crmdp.dealer.mars.service.IMarsRedemptionService;
import com.cap.bts.crmdp.dealer.member.service.IMaintainMemberService;
import com.cap.bts.crmdp.dealer.purchase.service.IMemberPackageService;
import com.cap.bts.crmdp.webservice.dto.WSCrmCancelOrderResultDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmCustomerDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmCustomerResultDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmOrderDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmPurchaseDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmPurchaseResultDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmSettlementDto;
import com.cap.bts.crmdp.webservice.dto.WSCrmSettlementResultDto;
import com.cap.bts.crmdp.webservice.dto.WSQueryDto;
import com.cap.bts.crmdp.webservice.dto.WSResultDto;
import com.cap.bts.framework.common.util.ApplicationContextUtil;

/**
 * @author YIFEGU
 *
 */
public class CrmFacade {

    private static final Logger LOGGER = Logger.getLogger(CrmFacade.class);

    public WSResultDto confirmSaleOrderForCRM(WSQueryDto dto) {
        LOGGER.error("Receive SO Number:" + dto.getSalerOrderNum());
        WSResultDto resultDto = new WSResultDto();
        resultDto.setResultCode("success");
        resultDto.setResultMsg("confirm order succeed in CRMDP");
        return resultDto;
    }
   
    /**
     * 客户和车辆信息同步
     * 
     * MARS在修改客户姓名、手机和车牌信息时，调用该接口，
     * 通知CRM相应地修改客户和车辆信息。客户信息变更时，
     * MARS仅传输Customer ID、Customer Name、Mobile、Service Center；
     * 车辆信息变更时则传输Customer ID、Customer Name、Mobile Phone、Car ID、Car Plate。
     * CRM端根据Customer ID、Car ID和Service Center判断是进行新建操作还是修改操作。
     * 
     * @Date        :      Oct 21, 2015
     * @param dto
     * @return
     */
    public WSCrmCustomerResultDto processCustomerInfo(WSCrmCustomerDto dto) {
         IMaintainMemberService maintainMemberService =(IMaintainMemberService)ApplicationContextUtil.getBean("maintainMemberServiceImpl"); 
       
        return   maintainMemberService.processCrmCustomerAndCarInfo(dto); 

    }
    
    /**
     * 取消订单行
     * 
     * MARS在未结算前可以删除订单行，当MARS删除订单时，需要调用CRM的Web Service，
     * 并提供参数Trans Type（交易类型）、SO Number和Card Number，CRM端会对之前的销售操作进行回退。
     * 
     * @Date        :      Oct 21, 2015
     * @param dto
     * @return
     */
    public WSCrmCancelOrderResultDto cancelOrder(WSCrmOrderDto dto) {
            IMarsRedemptionService redemptionService=(IMarsRedemptionService)ApplicationContextUtil.getBean("marsRedemptionServiceImpl");
       return   redemptionService.cancelOrder(dto); 
    }
    
    
    /**
     * 结算
     * 
     * 当MARS结算时，需要调用CRM的Web Service，并提供参数Trans Type（交易类型）、SO Number和Card Number，
     * CRM端会将之前的销售记录由“锁定”变更为“有效。”
     * 
     * @Date        :      Oct 21, 2015
     * @param dto
     * @return
     */
    public WSCrmSettlementResultDto settlement(WSCrmSettlementDto dto) {
            IMarsRedemptionService redemptionService=(IMarsRedemptionService)ApplicationContextUtil.getBean("marsRedemptionServiceImpl");
        return redemptionService.settementOrder(dto);
    }
    
    
    
}
